/*
 * 版权所有 ( c ) 联想集团有限公司 2005-2009 保留所有权利。
 * 项目：	Lenovo Push Service
 * 文件名：	ImgUtil.java
 * 版本:    1.0
 * 描述：	
 * 作者：	刘兵召
 * 日期：	Apr 30, 2010 
 * 修改历史：
 * 【时间】		【修改者】	【修改内容】
 */
package com.feng.util;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Collection;
import java.util.Iterator;

import javax.imageio.ImageIO;

import org.apache.commons.io.FileUtils;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class ImgUtil {
	
	/**
	 * 根据原图生成缩略图
	 * @param inputStream 原始图片文件流
	 * @param outputStream 缩略图片文件流
	 * @param width 缩略图片宽度
	 * @param height 缩略图片高度
	 * @param quality 缩略图片质量(0.0-1.0 setting of desired quality level)
	 * @return true/false (true:生成缩略图成功；false:生成失败)
	 */
	public static boolean zipImageFile(InputStream inputStream,OutputStream outputStream, int width, int height, float quality) {
		try {
			java.awt.Image srcFile = ImageIO.read(inputStream);
			BufferedImage tag = new BufferedImage(width, height, 1);
			tag.getGraphics().drawImage(srcFile, 0, 0, width, height, null);
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outputStream);
			JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);
			jep.setQuality(quality, true);
			encoder.encode(tag, jep);
			return true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}
	
	/**
	 * 从指定目录中读取指定后缀的图片来压缩
	 * @param directory 指定读取的目录
	 * @param ext 文件后缀
	 * @throws FileNotFoundException
	 */
	public static void fileListFromDir(String directory,String [] ext) throws FileNotFoundException{
		Collection collection = FileUtils.listFiles(new File(directory), ext, true);
		Iterator iter = collection.iterator();
		while(iter.hasNext()){
			File file = (File)iter.next();
			File fileOut = new File("D:/img/s_"+file.getName());
			InputStream inputStream = new FileInputStream(file);
			OutputStream outputStream = new FileOutputStream(fileOut);
			ImgUtil.zipImageFile(inputStream,outputStream,100,100,0.6f);
		}
	}
	
	public static void main(String[] args) throws FileNotFoundException{
		/*File file = new File("c:/a.png");
		File fileOut = new File("c:/b.png");
		InputStream inputStream = new FileInputStream(file);
		OutputStream outputStream = new FileOutputStream(fileOut);
		zipImageFile(inputStream,outputStream,480,800,0.6f);*/
		
		String [] ext = {"png"};
		fileListFromDir("D:/img/",ext);
	}
}
